home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / util / gnu / oleo_src.lha / src / HOW-TO-USE < prev    next >
Text File  |  1992-07-27  |  34KB  |  916 lines

  1.             How to Use Oleo
  2.  
  3. This is all the documentation there is at the moment.  I hope that this
  4. documentation is complete, (if not readable), but there may be omissions.
  5. Use the Source, and be sure to send me mail about anything you find unclear.
  6.  
  7. Oleo currently runs under 4.3BSD, HP-UX 7.0, and MS-DOS (3.3 with Turbo C 2.0).
  8. It should work on a SysV system, but may need some tweaking.  (I don't have
  9. easy access to SysV machines, so it does not get well tested on them.)
  10.  
  11. Oleo uses curses under BSD and SysV, and requires that standout mode be
  12. reverse-video, or some other mode where standout blanks are visually
  13. distinguishable from non-standout blanks.  (If this is not the case, you will
  14. have a hard time telling where the cell cursor is.)  (Modifying it to
  15. try to explicitly use reverse-video on SysV machines should not be too hard.
  16. I'd appreciate it if someone would send me the patch to do that.)
  17.  
  18. Detailed instructions for compiling and installing oleo are in the file
  19. INSTALL.
  20.  
  21. Send bug reports, comments, patches, etc to hack@gnu.ai.mit.edu
  22.  
  23. This document probably assumes you know a fair amount about how spreadsheets
  24. work.  Please let me know which parts should be clarified, and what new
  25. sections should be added.
  26.  
  27.  
  28.         Cell references:
  29.  
  30. Case of cell and range letters is ignored.  Lowercase letters in cell and
  31. range letters are silently turned into their uppercase equivelents.
  32.  
  33.     Absolute vs Relative references:
  34.  
  35. A reference to a cell may be either absolute or relative.  The only
  36. difference between them (besides how they are printed) is how they are
  37. adjusted when a cell is moved or copied.
  38.  
  39. When an expression containing an absolute reference is moved or copied, the
  40. reference will still point to the same cell.
  41.  
  42. When an expression containing a relative reference is moved or copied, the
  43. reference is changed to point to the cell at the same offset from the
  44. reference's new position.
  45.  
  46. So if the expression 'R[+1]C[+1]' is in cell R8C9 it refers to cell R9C10.
  47. If the same expression is copied into cell R1C1 it will refer to R2C2.
  48.  
  49.     With -DA0_REFS:
  50.  
  51. Relative cell reference have the form {col_let}{row_num}, as in A1 (the
  52. topleft cell in the sheet).
  53.         
  54. Absolute ones have the form ${col_let}${row_num}, as in $A$1 (The topleft
  55. cell in the sheet).
  56.  
  57. Mixed-mode ones work about the way you'd expect, with $A1 having an absolute
  58. column, but a relative row. . .
  59.  
  60. Ranges are either {cell_ref}:{cell_ref} or {cell_ref}.{cell_ref}, where the
  61. cell_refs describe opposite corners of the range.  So A1:B2 is the topmost,
  62. leftmost four cells in the spreadsheet.
  63.  
  64. Mixed mode rangers work, and have the syntax you'd expect.
  65.  
  66.     Without -DA0_REFS: (the default)
  67.  
  68. Absolute cell references have the form R{row_num}C{col_num}, as in R1C1 (the
  69. topleft cell in the sheet).
  70.  
  71. Relative ones have the form R[{offset}]C[{offset}], as in R[-1]C[+1] (The
  72. cell above and to the right of the current cell).  An offset of zero, can be
  73. deleted, along with its square-brackets, as in RC[+1] (the cell to the right
  74. of the current cell.)
  75.  
  76. Mixed-mode references also work about the same as you'd
  77. expect, as in R4C[-1] (the cell in row four that's one left
  78. of the current cell.)
  79.  
  80. Ranges are of the form R{row1}:{row2}C{col1}:{col2}, where the row and column
  81. references may be either absolute or relative.  If {row2}=={row1} or
  82. {col2}=={col1}, the colon and the redundant number may be omitted, as in
  83. R1:10c2 (Rows one through ten in column two).
  84.  
  85. Mixed-mode rangers work, and have the syntax you'd expect, as in R2:[-1]c3.
  86.  
  87.  
  88.         Keymaps:
  89.  
  90. Oleo normally has five keymaps.  They are:
  91.     main    The main command loop.
  92.     meta    The main command loop commands that are prefixed with
  93.         ESCape.
  94.     edit    Reading input text.
  95.     edit-meta Input text commands that are prefixed with ESCape.
  96.     ansi    The ansi arrow keys.
  97.     digit    Reading in a number to repeat a command.
  98.  
  99. Keymaps may have a 'default map'.  If a key is pressed which does not have an
  100. assigned meaning in that map, the map's default map is checked, and that
  101. map's default map, until a command is found or there are no more default maps
  102. to scan.
  103.  
  104. The edit map defaults to the main map, and the edit-meta map defaults to the
  105. meta map.
  106.  
  107.  
  108.         Input Editing:
  109.  
  110. When the spreadsheet is reading text input, you can use a few text-editing
  111. commands.  (Oleo doesn't currently use the readline() library; It may later,
  112. when the readline library has a better programmer and display interface.)
  113. Note that there in no history mechanism and no yank command.  If you
  114. accidentally ^U your text, it is *gone*.
  115.  
  116. The following editing commands are defined:
  117.  
  118. Name:        Key:    What it does:
  119.  
  120. M-A    insert-abs-ref        Insert/over-write an absolute reference to the
  121.                 current cell/region.
  122. M-R    insert-rel-ref        Insert/over-write a relative reference to the
  123.                 current cell/region.
  124. M-E    insert-cell-expression    Insert/over-write the expression in the
  125.                 current cell.
  126. M-V    insert-cell-value    Insert/over-write the value of the current
  127.                 cell.
  128. ^A    cursor-begin-line    Move the cursor to the beginning of the text.
  129. ^B    cursor-back-char    Move the cursor back a character.
  130. M-B    cursor-back-word    Move back a word.
  131. ^D    delete-next-char    Delete the character under the cursor.
  132. M-D    delete-next-word    Delete from the cursor to the end of
  133.                 the current word.
  134. ^E    cursor-end-line        Move to the end of the text.
  135. ^F    cursor-fwd-charF    Move forward a character.
  136. M-F    cursor-fwd-word        Move forward a word.
  137. ^H  ^?    delete-prev-char    Delete the character to the left of the cursor.
  138. ^J  ^M    finish-line        Finish editing the text, and execute the
  139.                 command you've been typing the text in for.
  140. ^K    delete-to-end        Delete from the cursor to the end of the text.
  141. M-O    toggle-over-write    Toggle between overwrite and insert mode.
  142. ^U  ^X    delete-to-start        (BEWARE!) Deletes from the cursor to the
  143.                 beginning of the line.
  144. ^W    delete-prev-word    Delete the word to the left of the cursor.
  145. ' ' to ~ self-insert        These characters are either inserted or
  146.                 over-written into the text.
  147.  
  148.         Input Defaults:
  149.  
  150. Almost all editing commands remember what you typed the last time you used
  151. that command, and start you up editing a copy of that text.  If you want to
  152. type in something completely new, just type ^X (or ^U) and type in your new
  153. text.
  154.  
  155.         Horizontal scrolling:
  156.  
  157. Since formula, etc may easily be longer than the width of the screen, oleo
  158. automatically uses horizontal scrolling whenever the cursor would get too
  159. near to either end of the screen.
  160.  
  161.  
  162.             Error Messages:
  163.  
  164. Error messages are displayed on the input line.  If oleo needs to display
  165. more than one error message at a time, it will display [MORE] at the end of
  166. the first msg, and will wait for you to type a key before displaying the next
  167. one.  Oleo will also display the [MORE] message if you are entering text in
  168. the input line, so that you will be able to see the error message.  Oleo may
  169. still sometimes clear the screen before you can read an error message.  This
  170. is probably a bug.
  171.  
  172.             Info Messages:
  173.  
  174. Some commands (like format-cell) occasionally display non-error information.
  175. If the status line is enabled, the message is displayed there, and subsequent
  176. non-error messages will over-write them without [MORE] prompting.  This in
  177. quite useful if the msg in question concerns how far oleo has gotten through
  178. some task (like reading a file).  If the status line is disabled, the
  179. messages are displayed in the input line.
  180.  
  181.             The Main Commands:
  182.  
  183. Key    Command Name        What it does
  184. h  ^B    go-left        These commands move the cell-cursor one cell
  185. j  ^N    go-down        in the appropriate direction.  
  186. k  ^P    go-up
  187. l  ^F    go-right
  188. y    go-upleft
  189. u    go-upright
  190. b    go-downleft
  191. n    go-downright
  192.  
  193. H    scroll-left        These scroll the current window one screenful
  194. J    scroll-down        in the appropriate direction.  They try to
  195. K    scroll-up        leave the cell cursor in (roughly the same
  196. L    scroll-right        place in the window, so that an L followed by
  197. Y    scroll-upleft        an H will leave the cell cursor back in the
  198. U    scroll-upright        original cell, however, since the number of
  199. B    scroll-downleft        rows and columns in each screenful varies,
  200. N    scroll-downright    this will not always work.
  201.  
  202. M-H    scan-left    These commands move to the first/last nonempty cell in
  203. M-J    scan-down    the current row/column.  If given a repeat count, they
  204. M-K    scan-up        go to the N-th most nonempty cell.  If there are no
  205. M-L    scan-right    cells, the cursor is moved to the leftmost/top cell.
  206.  
  207. ^G    break    This will abort a partially completed command.  If you are
  208.         typing text on the top line, the text you typed will be saved
  209.         and presented as the default the next time you start that
  210.         command.
  211.  
  212. ^L    recenter-window        This redraws the screen.  If the page option
  213.         is not set in this window, it will try to move the current
  214.         cell to the center of the window.  If the page option is set,
  215.         this will just redraw the screen.
  216.  
  217. o    set-option    This asks for an option to set or reset, and tries to
  218.         do so.
  219.  
  220.  
  221. d    set-defaults    This command will change the default alignment, format,
  222.         protection, or width.  If the status-line is enabled,
  223.         this will display the current settings there.
  224.  
  225. Q    quit    This command exits the spreadsheet and returns you to the
  226.         shell.  This may ask for confirmation if oleo thinks you have
  227.         unsaved changes.  If you do not save your changes before
  228.         quitting, they will be lost forever.
  229.  
  230. ^R    redraw-screen    This redraws the screen.  It is most useful if
  231.         line-noise or another program has scribbled on your display.
  232.                 
  233.  
  234. M-U    set-user-format        Set a user-defined format.
  235.  
  236. v    set-variable    This prompts you for a name followed by a cell or
  237.         range that you want to refer to by that name.  To
  238.         'undefine' a variable, use set-variable with just its
  239.         name.  Note that if -DA0_REFS is not used, creating a
  240.         variable with the same name as a formula function will
  241.         prevent you from using that function.
  242.  
  243.  
  244. V    show-variable
  245.  
  246. ^V    show-all-variables    This shows the values of all currently defined
  247.         variables.
  248.  
  249. !    recalculate     Recalculate the spreadsheet until all the cells whose
  250.         values may have changed have been evaluated.  If there are
  251.         circular cell references, the cells in the loop will be
  252.         evaluated at most 40 times (this number subject to change!)
  253.  
  254. :    bind-command    This asks for the name of a keymap followed by a
  255.         command name and a key to bind it to.  If the 'command' you
  256.         give is a cell or region in the spreadsheet, it is taken as a
  257.         macro, and bound to the key you specify.
  258.  
  259. ;    describe-key    Have the user press a key, and then describe
  260.         what function that key is bound to.
  261.  
  262. M-<    read-commands    This command opens the file you specify reads in each
  263.         line, and executes them as if you'd typed them in to
  264.         execute-command.  If any command needs more arguments than are
  265.         included on the line, it will prompt you (interactively) for
  266.         the missing information.
  267.  
  268. M->    write-keys    Write a list of commands to the file that, when
  269.         executed with read-commands, will return the keymaps to their
  270.         current state.
  271.  
  272. w    write-file    Save the spreadsheet to a file, using the current
  273.         file-format.
  274.  
  275. r    read-file    Read in a file in the current file-format.  This
  276.         erases the current contents of the spreadsheet first.  This
  277.         may ask for confirmation.
  278.  
  279. R    read-merge    Read in a file and merge its contents into the
  280.         current spreadsheet.  Note that some file-formats, (like
  281.         panic-save) won't work with this command.
  282.  
  283. ^X    clear-spreadsheet    Delete the entire spreadsheet.  This may ask
  284.         for confirmation if oleo thinks you may be about to lose
  285.         un-saved work.
  286.  
  287. c    copy-region    Copy a region.  Takes two ranges, copies the source
  288.         range into the dest range.  If the dest range size is a
  289.         multiple of the source range size, the source range is copied
  290.         multiple times.  If the dest range is given as a cell, the
  291.         cell is the location of the top-left corner of the dest range.
  292.  
  293. C    copy-values-in-region    Copy just the values of one region to another.
  294.  
  295. F    format-region    Change the format, alignment, protection,
  296.         or width of a region.  If the status line is active, oleo
  297.         will display the current alignment, format, width and
  298.         protection of the top-left cell in the region.
  299.  
  300. m    move-region    This is similar to copy-region, except that the two
  301.         ranges must be the same size, and that cells that reference
  302.         the source region may be modified to reference the dest
  303.         region instead.  (absolute references are modified, relative
  304.         ones aren't.)  Variables whose ranges are inside the source
  305.         region are also adjusted.
  306.  
  307. p    print-region    Print a region to a file.  Asks for a region
  308.         (to print) and a filename to to write to.
  309.  
  310. s    sort-region    Sort a region.  This takes the region to sort, a
  311.         region that is the first element of the region, and a list of
  312.         cells that are to be used as the sorting-keys.  Here's an
  313.         example.  sort-region r1:100c1:10 r1:2c1:10 +r1c2 -r1c3 This
  314.         means: Sort the region R1:100C1:10 in two-row, ten-column
  315.         chunks, sorting on the cell that's in the top-row
  316.         one-column-in.  If they are similar, use the cell in the
  317.         top-row two-columns-in, with high values ending up before low
  318.         ones.
  319.  
  320. W    write-region-to-file    Write a region of the spreadsheet to a file.
  321.         This command is not allowed with some
  322.         file-formats (like panic-save).
  323.  
  324. X    delete-region    Delete {value, formula, format, etc} of a
  325.         region.  This DOES NOT ask for confirmation.
  326.  
  327. M-(    start-entering-macro    Start storing a keyboard macro.  Keyboard
  328.         macros are strings that contain the characters you typed.
  329.  
  330. M-)    stop-entering-macro    Finish a keyboard macro, and store it in a
  331.         cell that you specify.
  332.  
  333. M-X    execute-command        This will allow you to execute either a
  334.         builtin command, or a macro.  For a builtin command, simply
  335.         enter the command's name (and, optionally, any arguments the
  336.         command will want).  For a macro, enter its name, or
  337.         the region in the spreadsheet that contains it.
  338.  
  339.         You can create macros with text strings.  Command names may
  340.         be enclosed in {CMD}, as in {go-left}.  Some commands may
  341.         take arguments, as in {go-up 12} or {goto-cell r1c3}.  To
  342.         execute multiple commands, concatenate them.  Other
  343.         characters are taken as keystrokes, and act exactly as if you
  344.         had typed them.
  345.  
  346.         When the spreadsheet is executing a macro, it stops when
  347.         1) It encounters an empty cell, or one which is not a string,
  348.            or which is the empty string "".
  349.         2) an error occurs while trying to parse a command name, or a
  350.            command's arguments.
  351.         3) All the cells in the region have been executed.
  352.  
  353.         The top-left cell in a region is executed first, then the one
  354.         below it, down to the bottom cell in the macro, then the one
  355.         to the right of the top-left cell, down to the bottom cell in
  356.         that column, etc. . .
  357.  
  358.         Macros may execute other macros.
  359.  
  360. g    goto-cell    Asks for a cell to go to, and moves the cell cursor
  361.         there.  The cell can be either a cell name as in 'R32C96',
  362.         or a variable.  This command starts with a default of
  363.         wherever the cursor was the last time this command was used.
  364.         If you type a range, the cursor is placed in the top-left
  365.         corner of the range, and the cell-mark is placed at the
  366.         opposite corner of the region.
  367.  
  368. ^@    mark-cell    Mark one corner of a rectangular region to use for
  369.         the next command.  (The cell cursor marks the other corner.)
  370.         You can use this while a command is prompting you for a
  371.         region by moving to one corner, typing ^@, moving to the
  372.         other corner, and hitting <RETURN>.
  373.  
  374. e    edit-cell    Edit the formula of the current cell.
  375.  
  376. E    edit-value-cell        Edit the value of the current cell.  Using
  377.         this command will replace the current cell's formula with a
  378.         constant expression.
  379.  
  380.  
  381. f    format-cell    Change the format, alignment, or protection of the
  382.         current cell, or the width of the current column.  If the
  383.         status line is enabled, the current alignment, format,
  384.         protection, and width will be displayed there.
  385.  
  386. x    delete-cell    This deletes the (value, formula, format, etc) of the
  387.         current cell.  To delete just the value and formula, use
  388.         <space><return>.
  389.  
  390. =    edit-cell-with-default    Enter a formula for the current cell with the
  391.         default text of the last formula you typed.
  392.  
  393. M-0    digit-0        Repeat the next command [digits] times.
  394. M-1    digit-1        You can type multiple digits, as in
  395. M-2    digit-2        M-1 0 0 j
  396. M-3    digit-3        which will go down 100 cells.  This command uses the
  397. M-4    digit-4        digit-map so that you the second and subsequent digits
  398. M-5    digit-5        do not need to be meta-ized.
  399. M-6    digit-6
  400. M-7    digit-7
  401. M-8    digit-8
  402. M-9    digit-9
  403.  
  404. 0-9    enter-text-in-cell    Enter a new formula that begins with the
  405.         character typed.  Note that this blows away whatever was
  406.         saved as a default from the last time you entered a formula.
  407.  
  408. O    show-options    This shows the current state of all the spreadsheet
  409.         options, and also shows the current definitions for all the
  410.         user-defined variables.
  411.  
  412. M-W    open-window    This command takes a line beginning with the letter
  413.         'h' (for horizontal), or 'v' (for vertical), followed by the
  414.         number of lines/columns to leave in the current window.
  415.         The cell cursor is placed in the new window.
  416.  
  417. M-C    close-window    This takes the number of a window to close, and makes
  418.         it go away.  The surrounding window(s) expand to fill the
  419.         space the window occupied.
  420.  
  421. M-G    goto-window    This takes the number of a window to go to, and
  422.         places the cell-cursor in that window.
  423.  
  424. M-C-D    debug    This command may be used by wizards to examine the internal
  425.         structure of spreadsheet objects.  This is very useful for
  426.         debugging oleo.
  427.  
  428. ^[    meta-map    The escape key is used to invoke commands that are
  429.         bound to keys in the meta-map.
  430.  
  431. M-[    ansi-map    This keymap handles the escape sequences produced by
  432.         most (all) ansi arrow keys.  If your keyboard produces
  433.         something different, you will have to modify the keymaps in
  434.         order for them to work.  You may want to add other commands
  435.         to this keymap so that the function keys on your keyboard
  436.         will also do something useful.
  437.  
  438. others    unbound        Complain.
  439.  
  440.  
  441.  
  442.         Displaying Cell Contents:
  443.  
  444. If a cell contains a number or string that takes more characters than the
  445. width of the cell to display, the display may slop over into the cell(s) to the
  446. right.  This does not affect the slopped over cells in any way.  Only cells
  447. that are empty, or have their format set to hidden, will be slopped over.
  448.  
  449. If there isn't room to display a number, a series of '#', will appear in the
  450. cell.
  451.  
  452. If there isn't room to display any other value, only the characters that fit
  453. (less one, so there'll be a space separating cells) will be displayed.
  454.  
  455.         Numeric formats:
  456.  
  457. Oleo can display numbers in a variety of formats.  In addition to the sixteen
  458. user-defined formats, you can use:
  459.  
  460. integer        The number is rounded to an integer before being displayed.
  461.  
  462. float        The number is displayed in normal, everyday notation, using
  463.         whatever precision is needed (or fits).
  464.  
  465. hidden        The number is not displayed.  It is recalculated, etc as
  466.         normal, but the cell is displayed as if it were empty.
  467.  
  468. graph        The number is displayed as a small graph.  If the number is
  469.         close to zero, it will be displayed as '0', If it is positive,
  470.         a row of '+'-es is displayed.  If it is negative, a row of
  471.         '-'-es is displayed.
  472.  
  473. The following formats require a precision.  The precision may be a number
  474. from zero to 14, in which case that number of digits will always be displayed
  475. after the decimal point (zero-padding or rounding the number as needed), or
  476. the precision may be 'float', in which case oleo will use as many digits as
  477. necessary.
  478.  
  479. general        This uses either normal or scientific notation, depending on
  480.         the magnitude of the number and the width of the column.
  481.  
  482. dollar        Positive values are preceeded by '$', (so 3 is displayed as
  483.         '$3').  Negative values are parenthasized (so -3 is displayed
  484.         as '($3)'), and all large values have a ',' every three
  485.         digits (so 1000 is displayed as '$1,000'.
  486.  
  487. comma        Positive numbers are not preceede by '$', but this is
  488.         otherwise identical to 'dollar'.
  489.  
  490. percent        The value is multiplied by 100, and is displayed with a
  491.         trailing '%'.  Thus .01 displays as '1%', while 1 displays as
  492.         '100%'.
  493.  
  494. fixed        The number is displayed in normal, everyday notation, using
  495.         the precision specified.  'fixed.float' is the same as
  496.         'float'.
  497.  
  498. exponent    The number is displayed in scientific notation.
  499.  
  500.  
  501.         User-defined numeric formats:
  502.  
  503. You can set up to sixteen user-defined numeric formats:
  504.  
  505. The current parts of a format are:
  506.  
  507.     Example:    What it is:
  508.     $        What to print before postive numbers.
  509.     (        What to print before negative numbers.
  510.             What to print after positive numbers.
  511.     )        What to print after negative numbers.
  512.     $0        What to print if the number is zero.
  513.     ,        What to print between the thousands and the
  514.             hundreds, etc.
  515.     .        What to print for a decimal point.
  516.  
  517.     0-14 or float    The number of digits to print after the decimal point.
  518.             'float' means use however many digits are needed, or
  519.             however many will fit, whichever is less. . .
  520.  
  521.     any-number    What to multiply the value by before printing.
  522.             Most often this will be one, but it might be 100 if
  523.             you're printing percentages, or .000001 if you're
  524.             printing in megabucks.  (Beware of overflow!)
  525.  
  526. Avoid using digits for the headers, trailers, the comma, or the decimal point
  527. symbol.  Using digits will confuse the internal routines and produce
  528. incomprehensible results. . .
  529.  
  530.  
  531.             Other Cell Formatting Options:
  532.  
  533. Values in a cell may be displayed aligned flush with either the left or right
  534. edges of the cell, or centered in the cell.  The default is left-aligned.
  535.  
  536. The width of a column of cells may be set to any non-negative value.  A value
  537. of zero means that cells in that column won't be displayed, and the normal
  538. cursor-motion commands will skip over those cells.  However, you can position
  539. the cursor on a non-displayed cell by using the goto-cell command.
  540.  
  541. If the width of a column is wider than the display, it is displayed as if it
  542. were the width of the display.
  543.  
  544.  
  545.             Currently Supported Options:
  546.  
  547. (no)auto    In auto mode, cells whose values may have chaged are
  548.         automatically recalculated.  In noauto mode, cells are only
  549.         recalculated when the recalculate command is used.
  550.  
  551. (no)background    In background mode, automatic recalculation is done while
  552. (no)bkgrnd    the spreadsheet waits for you to type a key (and stops while
  553.         the key is being handled).  In nobackground mode, oleo
  554.         performs all its recalculation before listening for
  555.         keystrokes. . .
  556.  
  557. (no)backup    In backup mode, whenever the spreadsheet writes out a file,
  558.         if the file already exists, a backup copy is made (like
  559.         emacs).
  560.  
  561. (no)bkup_copy    In nobackup mode bkup_copy is ignored.  In bkup_copy mode,
  562.         backup files are made by copying the original file, instead of
  563.         renaming it.
  564.  
  565. ticks (number)    This value controls how often should rnd(), cell(), my(),
  566.         curcell(), etc cells get updated.  This value is in seconds
  567.         (???).  The initial value is 10 seconds.
  568.  
  569. print (number)    This is the width of the page for the print command.  The
  570.         initial value is the width of the screen.
  571.  
  572. file (format-name) If -DUSE_DLD was defined, format-name may be any .o file
  573.         that contains definitions for the appropriate functions, or
  574.         'panic', which is the only file format that oleo will have
  575.         compiled into it.  If -DUSE_DLD was not defined, format-name
  576.         must be one of sylk, sc, panic, or list, and oleo will have
  577.         to be re-compiled before any other formats may be used.
  578.  
  579. load (file-name) This option is only avaliable if oleo was compiled with
  580.         -DUSE_DLD.  This option loads in a .o file of spreadsheet
  581.         functions, keyboard commands, and/or keymaps.  Spreadsheet
  582.         functions and keyboard commands must be loaded in before they
  583.         can be used in expressiond or bound to keys.
  584.  
  585. status (number)    This option controls which line on the screen is used for
  586.         displaying the status of the current cell.  The number may be
  587.         positive, (counting down from the top), negative (counting up
  588.         from the bottom, or zero (disabling the status line).
  589.  
  590. input (number)    This option controls which line on the screen is used for
  591.         reading lines of text.  The number may be positive (counting
  592.         down from the top), or negative (counting up from the
  593.         bottom), but not zero.
  594.         
  595. The following options affect the currently active window:
  596.  
  597. (no)page    Basically, in page mode, whenever a paticular cell is
  598.         displayed in the window, it will always be in the same
  599.         location on the screen.  In page mode, the recenter command
  600.         acts just like the redraw-screen command.
  601.  
  602. (no)pageh    These options turns on or off page mode only in
  603. (no)pagev    the horizontal or vertical axis.
  604.  
  605. link (wnum)    This option 'links' the current window with the one
  606.         specified.  A window may only be linked to one other window
  607.         at a time.  When a window is linked to another one, whenever
  608.         the cell cursor in the first window is moved, the cursor in
  609.         the other window moves as well.  (unless the cursor in other
  610.         window is locked from moving in that diretion.)
  611.  
  612.         (Should linking to a window force that window to link
  613.         back?  That might make life easier for naive users.)
  614.  
  615. nolink        This removes the link (if any) on the current window.
  616. unlink
  617.  
  618. (no)lockh    These options prevent the cell cursor in the current window
  619. (no)lockv    from moving in the horizontal or vertical direction, but only
  620.         when the cell cursor is moved in a window that this one is
  621.         linked.
  622.  
  623.  
  624. (no)edges    In edges mode oleo displays Row and Column numbers at the top
  625.         and left edges of the window.  Perhaps edges should be split
  626.         into edgeh and edgev?
  627.  
  628. (no)standout    In standout mode, the edges (see (no)edges) are drawn in
  629.         standout mode (reverse video, usually).
  630.  
  631. row n        Moves the cell cursor to row n.  This is obsolescent, and may
  632.         go away.
  633.  
  634. col n        Moves the cell cursor to column n.  This is obsolescent and
  635.         may go away.
  636.  
  637. Options supported by the list file format:
  638.  
  639. list ch        Use the character CH to separate the cell values.
  640.  
  641.  
  642.         File names:
  643.  
  644. If a file name begins with a '|', the rest of the name is taken as a command,
  645. which oleo opens a pipe to.  So you can use the name '|zcat file.Z' to read
  646. a compressed spreadsheed, or '|compress > file.Z' to write one.
  647.  
  648.             Formulae:
  649.  
  650. Numbers must be entered in 'general' format:
  651.     [-]digits[.digits][e[-]digits]
  652.  
  653. Strings are entered surrounded by double-quotes.  To include unusual
  654. characters, you can either use \char (works well for ") or use
  655. \nnn where nnn is the octal code for the character you want to include.
  656.  
  657.             Magic constants:
  658.  
  659. Note that oleo automatically converts the names of constants to upper case,
  660. but they can be entered in any case.
  661.  
  662. #TRUE            The logical TRUE value
  663. #FALSE            The logical FALSE value
  664.  
  665. #ERROR            Various error types.
  666. #BAD_INPUT
  667. #NON_NUMBER
  668. #NON_STRING
  669. #NON_BOOL
  670. #NON_RANGE
  671. #OUT_OF_RANGE
  672. #NO_VALUES
  673. #DIV_BY_ZERO
  674. #BAD_NAME
  675. #NOT_AVAIL
  676. #PARSE_ERROR
  677. #NEED_OPEN
  678. #NEED_CLOSE
  679. #NEED_QUOTE
  680. #UNK_CHAR
  681. #UNK_FUNC
  682.  
  683. #INF            Various trancendental values.  On some machines,
  684. #INFINITY        (like the vax), these may all be the same value.
  685. #NAN
  686. #NOT_A_NUMBER
  687. #NINF
  688. #MINUS_INFINITY
  689.  
  690.  
  691.             Infix functions:
  692.  
  693. str1 & str2        Text concatination.
  694. val1 = val2        #TRUE if val1 and val2 can be considered equal.
  695.             #FALSE otherwise
  696. val1 != val2        Equivelent to !(val1=val2)
  697. num1 >= num2        ...
  698. num1 > num2        ...
  699. num1 < num2        ...
  700. num1 <= num2        ...
  701. int1 % int2        Modulus        Note that these functions are
  702. num1 ^ num2        Exponentiaton    not as good as they should be
  703. num1 * num2        Multiplication    at detecting overflow.  There
  704. num1 / num2        Division    *IS* code that should force
  705. num1 + num2        Addition    INT type expressions to become
  706. num1 - num2        Subtraction    FLOAT, if the result wouldn't
  707.                         fit in an INT. . .
  708. ( val )            (To override default precedence) Note that
  709.             since oleo stores expressions in a
  710.             byte-compiled form, excess parens will
  711.             mysteriously vanish.
  712. - num            0-num
  713. ! bool            #TRUE if bool is #FALSE
  714.             #FALSE if bool is #TRUE, error otherwise.
  715. bool ? val1 : val2    if(bool==#TRUE)
  716.                 evaluate val1
  717.             else if(bool!=#FALSE)
  718.                 error...
  719.             else
  720.                 evaluate val2.
  721.  
  722.  
  723.         Prefix functions:
  724.  
  725. Note that if oleo is compiled with -DA0_REFS, all of these functions have an
  726. '@' prepended to their names.
  727.  
  728. if(bool,val1,val2)    if(test==#TRUE)
  729.                 evaluate val1
  730.             else if(test!=#FALSE)
  731.                 error...
  732.             else
  733.                 evaluate val2.
  734. and(bool1,bool2)    if(val1==#FALSE)
  735.                 #FALSE
  736.             else if(val1!=#TRUE)
  737.                 error...
  738.             else val2;
  739. or(bool1,bool2)        if(val1==#TRUE)
  740.                 #TRUE
  741.             else if(val1!=#FALSE)
  742.                 error...
  743.             else val2;
  744. pi()            3.14159265358979326848
  745. row()            The row number of the cell the expression is in.
  746. col()            The column number of the cell the expression is in.
  747. now()            The current time in seconds since Jan 1 1970 (?)
  748. abs(num)        The absolute value of num.
  749. acos(num)        The arc-cosine of num (num in radians)
  750. asin(num)        The arc-sine of num (num in radians)
  751. atan(num)        The arc-tangent of num (in radians)
  752. int(num)        Convert to integer (toward zero)
  753. ceil(num)        Convert to integer (round up)
  754. floor(num)        Convert to integer (round down)
  755. cos(num)        The cosine of num (in radians)
  756. dtr(num)        num degrees in radians
  757. exp(num)        The exponential function of num
  758. log(num)        The natural log of num
  759. log10(num)        The log of num to base 10
  760. rtd(num)        num radians in degrees
  761. sin(num)        The sine (in radians) of num
  762. sqrt(num)        The square-root of num
  763. tan(num)        The tangent (in radians) of num
  764. rnd(num)        A random number from 0 to num-1
  765. negate(num)        0-num
  766. not(bool)        #TRUE if bool is #FALSE
  767.             #FALSE if bool is #TRUE, error otherwise.
  768. iserr(val)        #TRUE if the expression is an error
  769.             else #FALSE
  770. isnum(val)        #TRUE if the expression is a number, or can be
  771.             automatically converted into a number, thus
  772.             isnum("12") is #TRUE, while isnum("12 ") is
  773.             #FALSE. (This might be worth fixing.)
  774. rows(rng)        number of rows in rng.
  775. cols(rng)        number of columns in rng.
  776. ctime(num)        Convert num into a readable date/time string.
  777. atan2(num1,num2)    Two number arctangent
  778. hypot(num1,num2)    use man 2 hypot
  779. fixed(num1,num2)    num1 rounded to num2 decimal places
  780.  
  781. index(rng,int)        the contents of the int-th cell in rng.
  782. index(rng,num1,num2)    The contents of the int1-th down and int2-th
  783.             over cell in rng
  784. oneof(int,val1,val2,val3...) switch(int) {
  785.                 case 1: val1;
  786.                 case 2: val2;
  787.                 ...
  788.                 default: error;
  789.             }
  790.  
  791. For the following functions, arguments that are ranges are scanned
  792. for numeric values only.  Strings, error values, empty cells, etc, are ignored.
  793.  
  794. Strings, etc, that are explicitly given to the functions are subjected to the
  795. usual conversion.
  796.  
  797. sum(vr1...)        ...
  798. prod(vr1...)        ...
  799. avg(vr1...)        ...
  800. std(vr1...)        The SAMPLE standard deviation.  To get the population
  801.             standard deviation, use sqrt(var(...))
  802. max(vr1...)        ...
  803. min(vr1...)        ...
  804. cnt(vr1...)        The number of numeric values found.
  805. var(vr1...)        The POPULATION variance.  To get the sample variance,
  806.             use std(...)^2
  807.  
  808. These functions are in the 'string' package.  If oleo is compiled with
  809. -DUSE_DLD, the string package must be loaded before these functions can be
  810. used.  If a spreadsheet that uses these functions is loaded before the
  811. string package is loaded, things will fail (silently!)  (This is probably a
  812. bug.
  813.  
  814. len(str)        length of string in characters.
  815. strupr(str)        string converted to upper case
  816. strlwr(str)        string converted to lower case
  817. strcap(str)        string with each word capitalized.
  818. trim(str)        string with extra spaces and non-ascii chars
  819.             removed.
  820. find(str1,str2,int)    return the location where str2 appears in
  821.             str1, start looking at character #int
  822. substr(int1,int2,str)    The characters in string from position int1
  823.             to position int2.  Positions can be either
  824.             positive (First character is #1, last char is
  825.             #(length of string)) or negative(last
  826.             character is #-1, first character is #-(length
  827.             of string)).
  828. mid(str,int1,int2)    The characters in string from int1 (counting
  829.             from the beginning) continuing for int2 chars.
  830. edit(str,int1,int2,...)    Remove the text from int1 to int2 in string
  831.             and replace it with ... (zero or more strings)
  832.             int1 and int2 are like for substr() above.
  833. repeat(int,str)        str repeated int times, thus repeat(2,"foo")
  834.             returns "foofoo"
  835. concat(vr1,...)        Concatinate strings, ranges, etc.
  836.  
  837.  
  838. These functions are in the 'cells' package.  If oleo is compiled with
  839. -DUSE_DLD, the cells package must be loaded before these functions can be
  840. used.
  841. my(str)            String:        Returns:
  842.             row        row()
  843.             column        col()
  844.             lock        "locked" or "unlocked"
  845.             protection    ditto
  846.             justify        "left" "right" "center" or "default"
  847.             alignment    ditto
  848.             format        "default" "user-1" etc.
  849.             fmt        ditto.
  850.             type        "error", "boolean", "float",
  851.                     "integer", "null", "Unknown",
  852.                     etc.
  853.             formula        A string of the cell's current
  854.                     formula.
  855.             value        The cells current value.
  856.             anything-else    error--> #BAD_INPUT
  857.  
  858. curcell(str)        Like my(), but for the cell under the
  859.             cell-cursor in the current window.
  860.  
  861. cell(int1,int2,str)    Like my(), but for the cell at Rint1Cint2.
  862.  
  863. member(rng,val)        The number of the first cell in RNG that contains
  864.             VAL, or zero if no cells contain it.
  865.  
  866.  
  867. These next four functions could probably be replaced by a pair of smart
  868. regex routines. . .
  869.  
  870. smember(rng,str)    The number of the first cell in RNG that contains a
  871.             substring of STR, or zero if no cell contains one.
  872.  
  873. members(rng,str)    The number of the first cell in RNG whose value is
  874.             a substring of STR.
  875.  
  876. pmember(rng,str)    The number of the first cell in RNG whose value
  877.             equals the first few characters of STR.
  878.  
  879. memberp(rng,str)    The number of the first cell in RNG whose value
  880.             starts with STR.
  881.  
  882. hlookup(rng,num,int)    Scan through the top row of RANGE looking for a
  883.             number which is greater than NUM.  Then return the
  884.             value in the cell that is INT rows down from the top
  885.             of the range.
  886.  
  887. vlookup(rng,num,int)    Like hlookup, but scans the left column
  888.             and returns the value in the cell that is INT
  889.             columns over from the left edge of the range.
  890.  
  891.  
  892. These functions are in the 'busi' package.  If oleo is compiled with
  893. -DUSE_DLD, the busi package must be loaded before these functions can be
  894. used.
  895.  
  896. pmt(p,r,t)        Payment for a loan of $P at rate R for T payments. . .
  897.  
  898. pv(pmt,int,term)    ...
  899.  
  900. npv(rng,rate)
  901. irr(range,guess)
  902. fv(pmt,int,term)
  903. rate(fut,pres,term)
  904. term(pmt,int,fut)
  905. cterm(int,fut,pres)
  906. sln(cost,salvage,life)
  907. syd(cost,salvage,life,period)
  908. ddb(cost,salvage,life,period)
  909. anrate(pmt,pres,term)
  910. anterm(pmt,prin,rate)
  911. balance(prin,rate,term,period)
  912. paidint(prin,rate,term,period)
  913. kint(prin,rate,term,period)
  914. kprin(prin,rate,term,period)
  915. compbal(print,rate,term)
  916.